package com.etc.controller;

import java.io.File;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

@Controller
@RequestMapping("uploadapi")
public class FileUploadController {

	@RequestMapping(value = "test1", method = RequestMethod.POST)
	public String test1(String name, HttpServletRequest request) {

		MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;
		// 得到一个 MultipartFile类型
		MultipartFile file = req.getFile("myfile");
		// 表单中的其他域的信息
		System.out.println("name :" + name);
		// 上传的文件的实际类型
		System.out.println("file.getContentType()" + file.getContentType());
		// 文件域 的name
		System.out.println("file.getName() :" + file.getName());
		// 文件名
		System.out.println("file.getOriginalFilename() :" + file.getOriginalFilename());
		// 文件大小 字节为单位
		System.out.println("file.getSize() :" + file.getSize());

		// 文件上传的动作: 将哪个文件 上传到哪里[?]去.
		// 这个file要指定目录 和文件名信息
		String destpath = req.getRealPath("photo") + "/" + file.getOriginalFilename();
		System.out.println("destPath :" + destpath);
		File destFile = new File(destpath);
		// 上传操作
		// inputstream 第一个参数
		// File 第二个参数
		try {
			FileUtils.copyInputStreamToFile(file.getInputStream(), destFile);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return "test1";
	}

	@RequestMapping(value = "test2", method = RequestMethod.POST)
	public String test2(String name, HttpServletRequest request, @RequestParam MultipartFile file) {

		// MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;
		// 得到一个 MultipartFile类型
		// MultipartFile file = req.getFile("myfile");
		// 表单中的其他域的信息
		System.out.println("test2 name :" + name);
		// 上传的文件的实际类型
		System.out.println("test2 file.getContentType()" + file.getContentType());
		// 文件域 的name
		System.out.println("file.getName() :" + file.getName());
		// 文件名
		System.out.println("file.getOriginalFilename() :" + file.getOriginalFilename());
		// 文件大小 字节为单位
		System.out.println("file.getSize() :" + file.getSize());

		// 文件上传的动作: 将哪个文件 上传到哪里[?]去.
		// 这个file要指定目录 和文件名信息
		String destpath = request.getRealPath("photo") + "/" + file.getOriginalFilename();
		System.out.println("destPath :" + destpath);
		File destFile = new File(destpath);
		// 上传操作
		// inputstream 第一个参数
		// File 第二个参数
		try {
			FileUtils.copyInputStreamToFile(file.getInputStream(), destFile);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return "test1";
	}

	/**
	 * 多文件上传
	 * 
	 * @param name
	 * @param request
	 * @param file
	 * @return
	 */
	@RequestMapping(value = "test3", method = RequestMethod.POST)
	public String test3(String name, HttpServletRequest request, @RequestParam MultipartFile[] file) {
		// 表单中的其他域的信息
		System.out.println("test3 name :" + name);
		for (MultipartFile f : file) {
			// 文件名
			System.out.println("file.getOriginalFilename() :" + f.getOriginalFilename());
			// 文件上传的动作: 将哪个文件 上传到哪里[?]去.
			if (!f.getOriginalFilename().isEmpty()) {
				// 这个file要指定目录 和文件名信息
				String destpath = request.getRealPath("photo") + "/" + f.getOriginalFilename();
				File destFile = new File(destpath);
				// 上传操作
				// inputstream 第一个参数
				// File 第二个参数
				try {
					FileUtils.copyInputStreamToFile(f.getInputStream(), destFile);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		// 上传的文件的实际类型

		return "test1";
	}

}
